package com.example.sneakerappforme1105;


import android.util.Log;

import androidx.lifecycle.ViewModelProvider;
import androidx.multidex.MultiDexApplication;
import androidx.room.Room;

import com.example.sneakerappforme1105.ViewModel.CartViewModel;
import com.example.sneakerappforme1105.bean.CartItem;
import com.example.sneakerappforme1105.dao.CartItemDao;
import com.example.sneakerappforme1105.database.AppDatabase;

import java.util.List;

public class MainApplication extends MultiDexApplication {
    private String TAG = "MainApplication";
    private static MainApplication mApp; // 当前应用的静态实例
    public static int goodsCount = 0; // 记录商品个数
    private AppDatabase appDatabase; // 当前app使用到的数据库
    private CartItemDao cartItemDao;
    private CartViewModel cartViewModel;
    // 获取唯一实例
    public static MainApplication getInstance(){return mApp;}
    @Override
    public void onCreate() {
        super.onCreate();
        mApp = this;

        // 构建数据库实例
        appDatabase = Room.databaseBuilder(mApp, AppDatabase.class, "appDB")
                .fallbackToDestructiveMigration().allowMainThreadQueries().build();

        cartViewModel = new ViewModelProvider.AndroidViewModelFactory(this).create(CartViewModel.class);

        cartItemDao = getAppDatabase().cartItemDao();
    }

    @Override
    public void onTerminate() {
        super.onTerminate();
    }

    @Override
    public void onTrimMemory(int level) {
        super.onTrimMemory(level);

        Log.d(TAG,"应用程序结束");
//        CartViewModel cartViewModel = new ViewModelProvider(this).get(CartViewModel.class);

        cartViewModel = MainApplication.getInstance().getCartViewModel();
        List<CartItem> items = cartViewModel.getCartItemList().getValue();
        if(items!=null){    // 说明此时
            for(CartItem item: items){  // 11.16 不带主键的重新插入
                if(item.getCartItemId()!=null) {    // 说明数据库中已经存在该数据，只需要更新即可
                    cartItemDao.updateCart(item);
                }else { // 不存在 cartItemId 的 cartItem项，插入数据库
                    CartItem newItem = new CartItem();
                    newItem.setCartId(item.getCartId());
                    newItem.setGoodsId(item.getGoodsId());
                    newItem.setNum(item.getNum());
                    newItem.setSize(item.getSize());
                    newItem.setPrice(item.getPrice());
                    cartItemDao.insertOneCartItem(newItem);
                }
            }
        }

        Log.d(TAG,"应用结束插入数据 "+items.size());

//        new Thread(() -> {
//            if (items != null) {    // 如果 购物车里有数据
//                cartItemDao.insertCartList(items);  // 将 cartView中的所有数据插入数据库
//            }
//        }).start();
    }

    public AppDatabase getAppDatabase(){return appDatabase;}

    public CartViewModel getCartViewModel(){return cartViewModel;}

}
